﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TSCPrintUnit;
using VM.Shared.Model;
using VM.Shared.ReturnValue;

namespace Test
{
    public class 完成
    {
        public ReturnError 失败(TestInfo testInfo)
        {
            try
            {
                //打印模板与大小还没确定，先注释掉此部分代码，2024-10-24
                //if (testInfo.打印机)
                //{
                //    var 失败列表 = testInfo.DicTestResult.Values.Where(obj => obj.IsOK == false);
                //    if (失败列表 == null || 失败列表.Count() <= 0)
                //    {
                //        return new ReturnError() { IsOK = false, ErrStr = "失败不打印，无测试失败的项" };
                //    }

                //    //获取日期+前面4项失败的信息进行打印（如果超过4项，则应该去看测试报告，这里只做简略显示）
                //    var 打印列表 = 失败列表.Take(4).ToList();
                //    TSCPrint print = new TSCPrint();
                //    //记录打印时间
                //    print.AddDict("datetime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                //    for (int i = 0; i < 打印列表.Count(); i++)
                //    {
                //        print.AddDict($"ng{i + 1}", 打印列表[i].TestValue);
                //    }
                //    //记录NG项总个数
                //    print.AddDict("ngcount", 失败列表.Count().ToString());
                //    print.Print("Bar Code Printer TT047-70H (300 dpi)", @"D:\标签\机身标签3E_NG.btw", 1);
                //}

                return new ReturnError() { IsOK = true, ErrStr = "" };
            }
            catch (Exception ex)
            {
                return new ReturnError() { IsOK = false, ErrStr = ex.Message };
            }
        }
        public ReturnError 成功(TestInfo testInfo)
        {
            ReturnError returnError = new ReturnError();
            try
            {
                //打印标签 
                if (testInfo.打印机)
                {
                    TSCPrint tSCPrint = new TSCPrint();
                    string sn = "";
                    foreach (var item in testInfo.DicTestResult)
                    {
                        //SN
                        if (item.Key.Contains("读取SN"))
                        {
                            sn = item.Value.TestValue;
                            tSCPrint.AddDict("SN", item.Value.TestValue);
                        }
                        //硬件版本号
                        else if (item.Key.Contains("读ECU硬件版本号F191"))
                        {
                            //tSCPrint.AddDict("HW", item.Value.TestValue);
                            string value = item.Value.TestValue;
                            var 插入索引 = item.Value.TestValue.Length - 2;
                            if (插入索引 < 0)
                            {
                                插入索引 = 0;
                            }
                            value = value.Insert(插入索引, "/");
                            tSCPrint.AddDict("HW", value);
                        }
                        //软件版本号
                        else if (item.Key.Contains("读ECU二级应用软件F1B5"))
                        {
                            //tSCPrint.AddDict("SW", item.Value.TestValue);
                            string value = item.Value.TestValue;
                            var 插入索引 = item.Value.TestValue.Length - 2;
                            if (插入索引 < 0)
                            {
                                插入索引 = 0;
                            }
                            value = value.Insert(插入索引, "/");
                            tSCPrint.AddDict("SW", value);
                        }
                        //ECU
                        else if (item.Key.Contains("读取ECU零件号"))
                        {
                            tSCPrint.AddDict("ECU", item.Value.TestValue);
                        }
                        //供应商名称
                        else if (item.Key.Contains("读系统供应商标识号F18A"))
                        {
                            tSCPrint.AddDict("supplier", item.Value.TestValue);
                        }
                        //else if (item.Key.Contains("ECU生产日期"))
                        //{
                        //    tSCPrint.AddDict("Date", item.Value.TestValue);
                        //    // tSCPrint.AddDict("Date", DateTime.UtcNow.ToString("yyMMdd"));
                        //}
                        //根据最新需求，生产日期更改为从SN中进行截取，2024-09-09
                    }
                    //DateTime.UtcNow.ToString("yyMMdd");
                    if (!string.IsNullOrWhiteSpace(sn))
                    {
                        string 生产日期 = 根据SN解析生产日期(sn.Replace(" ", ""));
                        tSCPrint.AddDict("Date", 生产日期);
                    }

                    tSCPrint.Print("Bar Code Printer TT047-70H (300 dpi)", @"D:\标签\机身标签3E.btw", 1);
                }

                returnError.IsOK = true;
                returnError.ErrStr = "";
                return returnError;
            }
            catch (Exception ex)
            {
                returnError.IsOK = false;
                returnError.ErrStr = ex.Message;
            }
            return returnError;
        }
        /// <summary>
        /// 根据SN解析生产日期
        /// </summary>
        /// <param name="sn"></param>
        /// <returns></returns>
        private string 根据SN解析生产日期(string sn)
        {
            //7F  3622  C  R5140005
            //R514（R：年，5：月，14：日），具体枚举值查看SN标签规则文档
            string 生产日期 = string.Empty;
            if (sn.Length < 11)
            {
                return "";  //长度不匹配
            }

            string year = sn.Substring(7, 1).ToUpper();
            string month = sn.Substring(8, 1).ToUpper();
            string 日期 = sn.Substring(9, 2);

            if (!获取生产日期年份字典().TryGetValue(year, out string 年份))
            {
                年份 = year;
            }
            if (!获取生产日期月份字典().TryGetValue(month, out string 月份))
            {
                月份 = month;
            }

            return $"{年份}{月份}{日期}";
        }
        /// <summary>
        /// 获取生产日期年份字典
        /// 根据上汽机型SN标签规则文档定义
        /// </summary>
        /// <returns></returns>
        private Dictionary<string, string> 获取生产日期年份字典()
        {
            return new Dictionary<string, string>()
            {
                { "R","2024"},{ "S","2025"},{ "T","2026"},{ "V","2027"},{ "W","2028"},{ "X","2029"},{ "Y","2030"},
                { "1","2031"},{ "2","2032"},{ "3","2033"},{ "4","2034"},{ "5","2035"},{ "6","2036"},{ "7","2037"},{ "8","2038"},{ "9","2039"},
                { "A","2040"},{ "B","2041"},{ "C","2042"},{ "D","2043"},{ "E","2044"},{ "F","2045"},
            };
        }
        /// <summary>
        /// 获取生产日期月份字典
        /// 根据上汽机型SN标签规则文档定义
        /// </summary>
        /// <returns></returns>
        private Dictionary<string, string> 获取生产日期月份字典()
        {
            return new Dictionary<string, string>()
            {
                { "1","01" },{ "2","02" },{ "3","03" },{ "4","04" },{ "5","05" },{ "6","06" },
                { "7","07" },{ "8","08" },{ "9","09" },{ "A","10" },{ "B","11" },{ "C","12" },
            };
        }
    }
}
